(&a_array)[size]和&a_array[size]的区别

来源:百度知道 编辑:UC知道 时间:2024/07/08 04:40:22
谢谢大虾
补充:这里的&能从引用来考虑吗
原文定义是:min(int (&a_array)[size]){…}
调用是:
int ia[]={10,7,6,5}; int min(ia);
这里能用a_array[size]或&a_array[size]代替吗,他们的区别是什么?(&a_array)[size]是什么意思?很抱歉,先前没说明白,谢谢各位

(&a_array)[size]通常是用于二维数组里的
用来表示行里面的各列的元素
(&a_array)[0]。。(&a_array)[n]表示列元素
在二维里。如果写成&a_array[size]
则表示的是各行的元素。而不代表列。
如&a_array[0]表示第一行
这样写主要是用来区分一维

&a_array[size]用来表示一维数组
&a_array[0] 表示第一个元素

这里不能仅用a_array[size]或&a_array[size]代替
因为这个只是传递首地址。并没有传递数组长度。一般这样的传递需要再加一个size.
所以min(int &a_array[]),int size)。这样的时候就可以代替。
int (&a_array)[size]这个表示把首地址和大小一起传进来。

再来解释一下一维的差别
a[6]中如果你把a当作地址来传递的话。他不知道数组的长度。传递的时候a[]就可以,你写成a[6]反而是错的
所以总是要在传递的时候加一个size长度。
而(a)[6]={(a)[0]....(a)[5]}所以他既知道首地址,又知道大小的。

如果一个形参的话,它的写法也很奇特。。
完全的可以使用
int min(int a_array[])或者int min(int *a_array),
但是上面这两种定义方式来取最小值的话,需要传数组的长度进去,应该这样定义
int min(int a_array[],int size)或者int min(int *a_array,int size)。
莫非int min(int (&a_array)[size]){…}可以顺便传数组长度?奇了。。。。
随便问下,你的SIZE是常量吗?还是#define出来的

后者是我们常见的格式,a_array是个数组,a_array[size]就是数组中下标为size的元素,前面加了&,就是取这个元素的地址.

前者基本没见过,就是把变量a_array的地址看成是一个数组的